<!-- 
- 给FormItem留插槽
- 设置数据和校验规则
- 全局校验
-->
<template>
  <div>
    <slot></slot>
  </div>
</template>
<script>
export default {
  provide() {
    return {
      // 传递Form实例给后代，比如FormItem用来校验
      form: this, 
    };
  },
  props: {
    model: {
      type: Object,
      required: true,
    },
    rules: {
      type: Object,
    },
  },
  methods: {
    validate(cb) {
      // map结果是若干Promise数组
      // 没有prop属性不做校验
      const tasks = this.$children.filter((item) => item.prop)

      // 调用子组件的validateFormItem()方法
      const results = tasks.map((item) => item.validateFormItem()); 

      // 所有任务必须全部成功才算校验通过
      Promise.all(results)
        .then(() => cb(true))
        .catch(() => cb(false));
    },
  },
};
</script>